home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / tools / ivl / src / scrncom.h < prev    next >
Text File  |  2000-03-23  |  12KB  |  271 lines

  1. #if    !defined(SCRNCOM_H_HAS_INCLUDED)
  2. #define    SCRNCOM_H_HAS_INCLUDED
  3. /*
  4. *    (グラフィック/テキストなど)画面制御に関する定義集
  5. *
  6. *注記    * 定義内容については各種ハードウェア解説書を参照のこと。
  7. *     ちなみに私が参考にしたのは「Inside X68000」(桑野正彦 著/ソフトバンク刊)
  8. *    である。
  9. *
  10. *    programed by dummy.x.    from Nov.14,1998
  11. */
  12. #include    "comtype.h"
  13.  
  14. /* 定数定義 */
  15.     /* 色データ */
  16. #define    RGB_VALUE_MIN    0    /* RGB各要素の最小値 */
  17. #define    RGB_VALUE_MAX    31    /* RGB各要素の最大値 */
  18.     /* グラフィック画面関係 */
  19. #if    defined(GRPH_512)    /* 実画面サイズ:512x512 */
  20.         /* VRAM */
  21.  #define    GRPH_PAGE_WIDTH        512    /* ページ横幅 */
  22.  #define    GRPH_PAGE_W_BYTES    (GRPH_PAGE_WIDTH * 2)    /* ページ横幅のバイト数 */
  23.  #define    GRPH_PAGE_HEIGHT    512    /* ページ縦高 */
  24.             /* ページ数 */
  25.  #if    defined(GRPH_COLOR_16)    /* 16色 */
  26.   #define    GRPH_PAGE_KAZ    4
  27.  #elif    defined(GRPH_COLOR_256)    /* 256色 */
  28.   #define    GRPH_PAGE_KAZ    2
  29.  #else                /* 65536色 */
  30.   #define    GRPH_PAGE_KAZ    1
  31.  #endif
  32.  #define    GRPH_PAGE_SIZE    (GRPH_PAGE_WIDTH * GRPH_PAGE_HEIGHT)
  33.                         /* 1ページのサイズ(dot数) */
  34.  #define    GRPH_PAGE_BYTES    (GRPH_PAGE_W_BYTES * GRPH_PAGE_HEIGHT)
  35.                         /* 1ページのサイズ(byte数) */
  36.  #define    GRPH_PAGE_0    ((ushort *)0xc00000)        /* ページ0アドレス */
  37.  #define    GRPH_PAGE_1    (GRPH_PAGE_0 + GRPH_PAGE_SIZE)    /* ページ1アドレス */
  38.  #define    GRPH_PAGE_2    (GRPH_PAGE_1 + GRPH_PAGE_SIZE)    /* ページ2アドレス */
  39.  #define    GRPH_PAGE_3    (GRPH_PAGE_2 + GRPH_PAGE_SIZE)    /* ページ3アドレス */
  40.         /* パレット */
  41.             /* 色数 */
  42.  #if    defined(GRPH_COLOR_16)    /* 16色 */
  43.   #define    GRPH_COLOR_KAZ    16
  44.  #elif    defined(GRPH_COLOR_256)    /* 256色 */
  45.   #define    GRPH_COLOR_KAZ    256
  46.  #else                /* 65536色 */
  47.   #define    GRPH_COLOR_KAZ    65536
  48.  #endif
  49.  #define    GRPH_PALET_ADDR    ((ushort *)0xe82000)    /* パレットデータアドレス */
  50. #else                /* 実画面サイズ:1024x1024 */
  51.         /* VRAM */
  52.  #define    GRPH_PAGE_WIDTH        1024    /* ページ横幅 */
  53.  #define    GRPH_PAGE_W_BYTES    (GRPH_PAGE_WIDTH * 2)    /* ページ横幅のバイト数 */
  54.  #define    GRPH_PAGE_HEIGHT    1024    /* ページ縦高 */
  55.   #define    GRPH_PAGE_KAZ    1        /* ページ数 */
  56.  #define    GRPH_PAGE_SIZE    (GRPH_PAGE_WIDTH * GRPH_PAGE_HEIGHT)
  57.                         /* 1ページのサイズ(dot数) */
  58.  #define    GRPH_PAGE_BYTES    (GRPH_PAGE_W_BYTES * GRPH_PAGE_HEIGHT)
  59.                         /* 1ページのサイズ(byte数) */
  60.  #define    GRPH_PAGE_0    ((ushort *)0xc00000)        /* ページ0アドレス */
  61.         /* パレット */
  62.             /* 色数 */
  63.  #if    defined(GRPH_COLOR_65536)    /* 65536色 */
  64.   #define    GRPH_COLOR_KAZ    65536
  65.  #elif    defined(GRPH_COLOR_256)        /* 256色 */
  66.   #define    GRPH_COLOR_KAZ    256
  67.  #else                    /* 16色 */
  68.   #define    GRPH_COLOR_KAZ    16
  69.  #endif
  70.  #define    GRPH_PALET_ADDR    ((ushort *)0xe82000)    /* パレットデータアドレス */
  71. #endif
  72.  
  73.     /* テキスト画面関係 */
  74.         /* VRAM */
  75. #define    TEXT_PLANE_WIDTH    1024    /* プレーン全体の横幅 */
  76. #define    TEXT_PLANE_W_BYTES    (TEXT_PLANE_WIDTH / 8)    /* 横1ラインのバイト数 */
  77. #define    TEXT_PLANE_HEIGHT    1024    /* プレーン全体の縦高 */
  78. #define    TEXT_PLANE_SIZE        (TEXT_PLANE_WIDTH * TEXT_PLANE_HEIGHT)
  79.                     /* 1プレーンのdot数 */
  80. #define    TEXT_PLANE_BYTES    (TEXT_PLANE_W_BYTES * TEXT_PLANE_HEIGHT)
  81.                     /* 1プレーンのバイトサイズ */
  82. #define    TEXT_PLANE_0    ((uchar *)0xe00000)            /* プレーン0先頭アドレス */
  83. #define    TEXT_PLANE_1    (TEXT_PLANE_0 + TEXT_PLANE_BYTES)    /* プレーン1先頭アドレス */
  84. #define    TEXT_PLANE_2    (TEXT_PLANE_1 + TEXT_PLANE_BYTES)    /* プレーン2先頭アドレス */
  85. #define    TEXT_PLANE_3    (TEXT_PLANE_2 + TEXT_PLANE_BYTES)    /* プレーン3先頭アドレス */
  86.         /* パレット
  87.         *    テキストパレットは、スプライトパレット0と共用
  88.         */
  89. #define    TEXT_PALET_KAZ    16    /* パレット数 */
  90. #define    TEXT_PALET_ADDR    ((ushort *)0xe82200)    /* テキストパレットアドレス */
  91.  
  92.     /* スプライト関係 */
  93.         /* PCGエリア */
  94. #define    PCG_PAT_KAZ    256                /* PCG パターン数 */
  95. #define    PCG_PAT_WIDTH    16                /* 1パターンの横幅 */
  96. #define    PCG_PAT_W_BYTES    (PCG_PAT_WIDTH / 2)        /* 横1ラインのバイト数(1dot=4bit) */
  97. #define    PCG_PAT_HEIGHT    16                /* 1パターンの縦高 */
  98. #define    PCG_PAT_SIZE    (PCG_PAT_WIDTH * PCG_PAT_HEIGHT)    /* 1パターンのdot数 */
  99. #define    PCG_PAT_BYTES    (PCG_PAT_SIZE / 2)            /* 1パターンのバイトサイズ */
  100. #define    PCG_MEM_ADDR    ((uchar *)0xeb8000)        /* PCG メモリアドレス */
  101. #define    PCG_MEM_BYTES    (PCG_PAT_BYTES * PCG_PAT_KAZ)    /* PCG メモリサイズ(バイト単位) */
  102.         /* パレット
  103.         *    スプライトパレット0 はテキストパレットと共用なので、
  104.         *    ここでは除外して扱う
  105.         */
  106. #define    SPR_PALET_ON_TBL    16    /* 1テーブル上のパレット数 */
  107. #define    SPR_PALET_TBL_KAZ    15    /* テーブル数 */
  108. #define    SPR_PALET_KAZ    (SPR_PALET_ON_TBL * SPR_PALET_TBL_KAZ)    /* 総パレット数 */
  109. #define    SPR_PALET_BYTES    (SPR_PALET_KAZ * sizeof(ushort))    /* パレットデータサイズ(バイト単位) */
  110. #define    SPR_PALET_ADDR    (TEXT_PALET_ADDR + TEXT_PALET_KAZ)    /* パレット開始アドレス */
  111.  
  112.     /* BG関係 */
  113. #define    BG_PAGE_WIDTH    64                    /* 1ページの横パターン数 */
  114. #define    BG_PAGE_HEIGHT    64                    /* 1ページの縦パターン数 */
  115. #define    BG_PAGE_SIZE    (BG_PAGE_WIDTH * BG_PAGE_HEIGHT)    /* 1ページのパターン数 */
  116.         /* PCG パターン */
  117. #if    defined(BG_PCG_PAT_SIZE_8)
  118.  #define    BG_PCG_PAT_WIDTH    8    /* 横幅 */
  119.  #define    BG_PCG_PAT_HEIGHT    8    /* 縦高 */
  120. #else
  121.  #define    BG_PCG_PAT_WIDTH    16    /* 横幅 */
  122.  #define    BG_PCG_PAT_HEIGHT    16    /* 縦高 */
  123. #endif
  124. #define    BG_PCG_PAT_W_BYTES    (BG_PCG_PAT_WIDTH / 2)        /* 横1ラインのバイト数 */
  125. #define    BG_PCG_PAT_SIZE        (BG_PCG_PAT_WIDTH * BG_PCG_PAT_HEIGHT)
  126.                                 /* 1パターンのdot数 */
  127. #define    BG_PCG_PAT_BYTES    (BG_PCG_PAT_SIZE / 2)        /* 1パターンのバイトサイズ */
  128.         /* データエリア */
  129. typedef struct {        /* データ構造(2byte) */
  130.     char vr: 1;        /* 垂直方向反転(=1:反転) */
  131.     char hr: 1;        /* 水平方向反転(=1:反転) */
  132.     char rsv: 2;        /* 必ず 0 */
  133.     char color: 4;        /* 色コードの上位4bit(=パレットテーブル番号) */
  134.     char pcg;        /* 使用パターン番号 */
  135. } bg_data_t;
  136. #define    BG_DATA_AREA_0    ((ushort *)0xebc000)    /* データエリア0先頭アドレス */
  137. #define    BG_DATA_AREA_1    ((ushort *)0xebe000)    /* データエリア1先頭アドレス */
  138.         /* スクロールレジスタ */
  139. #define    BG_PAGE0_SCRL_X    ((short *)0xeb0802)    /* ページ0スクロールX座標アドレス */
  140. #define    BG_PAGE0_SCRL_Y    ((short *)0xeb0800)    /* ページ0スクロールY座標アドレス */
  141. #define    BG_PAGE1_SCRL_X    ((short *)0xeb0806)    /* ページ1スクロールX座標アドレス */
  142. #define    BG_PAGE1_SCRL_Y    ((short *)0xeb0804)    /* ページ1スクロールY座標アドレス */
  143.         /* コントロールレジスタ(2byte) */
  144. typedef struct {
  145.     char rsv0: 6;        /* 必ず 0 */
  146.     char disp_cpu: 1;    /* スプライト/BG表示フラグ(=0:表示off/=1:表示on) */
  147.     char rsv1: 3;        /* 必ず 0 */
  148.     char bg1_txsel: 2;    /* BG1の使用データエリア
  149.                 *    (=00:エリア0/=01:エリア1/=10,11:未定義)
  150.                 */
  151.     char bg1_on: 1;        /* BG1表示フラグ(=0:表示off/=1:表示on) */
  152.     char bg0_txsel: 2;    /* BG0の使用データエリア
  153.                 *    (=00:エリア0/=01:エリア1/=10,11:未定義)
  154.                 */
  155.     char bg0_on: 1;        /* BG0表示フラグ(=0:表示off/=1:表示on) */
  156. } bg_ctrl_t;
  157. #define    BG_CTRL    ((ushort *)0xeb0808)    /* レジスタアドレス */
  158.  
  159.     /* CRTC */
  160.         /* 動作ポートレジスタ(2byte) */
  161. typedef struct {    /* ビット構造 */
  162.     char uncoded;    /* 未使用領域 */
  163.     char rsv0: 4;    /* 予約域 */
  164.     char rc: 1;    /* テキスト画面ラスタコピー(bit=1:開始/=0:停止) */
  165.     char rsv1: 1;    /* 必ず 0 */
  166.     char fc: 1;    /* グラフィック画面高速クリア(bit=1:開始/=0:停止) */
  167.     char vi: 1;    /* 画像取り込み(bit=1:開始/=0:停止) */
  168. } crtc_mode_t;
  169. enum {        /* ビット番号 */
  170.     CRTC_MODE_VI = 0,    /* 画像取り込み(bit=1:開始/=0:停止) */
  171.     CRTC_MODE_FC,        /* グラフィック画面高速クリア(bit=1:開始/=0:停止) */
  172.     CRTC_MODE_0,        /* 必ず 0 */
  173.     CRTC_MODE_RC,        /* テキスト画面ラスタコピー(bit=1:開始/=0:停止) */
  174.     CRTC_MODE_BITS
  175. };
  176. #define    CRTC_MODE    ((ushort *)0xe80480)
  177.         /* R21レジスタ(2byte) */
  178. typedef struct {    /* ビット構造 */
  179.     short rsv: 6;    /* 予約域 */
  180.     short men: 1;    /* テキスト画面アクセスマスクの有効(bit=1)/無効(bit=0)切替 */
  181.     short sa: 1;    /* テキスト画面同時アクセスのon(bit=1)/off(bit=0)切替 */
  182.     short ap: 4;    /* テキスト画面同時アクセス対象プレーン(bit=1:該当プレーンを対象に) */
  183.     short cp: 4;    /* テキスト画面ラスタコピー対象プレーン(bit=1:該当プレーンを対象に)
  184.             * or グラフィック画面高速クリア対象ページ(bit=1:該当プレーンを対象に)
  185.             *    4ページの時は各bitが各ページに該当
  186.             *    2ページの時は上位2bitがページ1に、下位2bitがページ0に該当
  187.             *    1ページの時は全bitがページ0に該当
  188.             */
  189. } crtc_r21_t;
  190. enum {        /* ビット番号 */
  191.     CRTC_R21_CP = 0,    /* テキスト画面ラスタコピー対象プレーン
  192.                 * or グラフィック画面高速クリア対象ページ
  193.                 *    bit=1で該当プレーン/ページを対象にする(4bit)
  194.                 *
  195.                 *    グラフィックの場合、
  196.                 *    4ページの時は各bitが各ページに該当
  197.                 *    2ページの時は上位2bitがページ1に、下位2bitがページ0に該当
  198.                 *    1ページの時は全bitがページ0に該当
  199.                 */
  200.     CRTC_R21_AP = CRTC_R21_CP + 4,
  201.                 /* テキスト画面同時アクセス対象プレーン(4bit)
  202.                 *    (bit=1:該当プレーンを対象に)
  203.                 */
  204.     CRTC_R21_SA = CRTC_R21_AP + 4,
  205.                 /* テキスト画面同時アクセスのon(bit=1)/off(bit=0)切替 */
  206.     CRTC_R21_MEN,        /* テキスト画面アクセスマスクの有効(bit=1)/無効(bit=0)切替 */
  207.     CRTC_R21_BITS
  208. };
  209. #define    CRTC_R21    ((ushort *)0xe8002a)
  210.         /* R22レジスタ(2byte) */
  211. typedef struct {    /* ビット構造 */
  212.     char src;    /* ラスタコピー元ラスタブロック(1ブロック=4ラスタ) */
  213.     char dst;    /* ラスタコピー先ラスタブロック */
  214. } crtc_r22_t;
  215. #define    CRTC_R22    ((ushort *)0xe8002c)
  216.         /* R23レジスタ(2byte) */
  217. #define    CRTC_R23    ((ushort *)0xe8002e)    /* テキスト画面:アクセスマスク */
  218.  
  219.     /* ビデオコントローラ */
  220.         /* R1 */
  221. #define    VCTRL_R1    ((ushort *)0xe82500)
  222.  
  223.         /* R2 */
  224. enum {        /* ビット番号 */
  225.     VCTRL_R2_GS0 = 0,    /* 512x512 グラフィック 優先度最高ページの表示on/off(=1:on) */
  226.     VCTRL_R2_GS1,        /* 512x512 グラフィック 優先度高ページの表示on/off(=1:on) */
  227.     VCTRL_R2_GS2,        /* 512x512 グラフィック 優先度低ページの表示on/off(=1:on) */
  228.     VCTRL_R2_GS3,        /* 512x512 グラフィック 優先度最低ページの表示on/off(=1:on) */
  229.     VCTRL_R2_GS4,        /* 1024x1024 グラフィック 表示on/off(=1:on) */
  230.     VCTRL_R2_TON,        /* テキスト画面 表示on/off(=1:on) */
  231.     VCTRL_R2_SON,        /* スプライト/BG画面 表示on/off(=1:on) */
  232.     VCTRL_R2_0,        /* 必ず 0 */
  233.     VCTRL_R2_GT,        /* =1:グラフィックとテキストを合成 */
  234.     VCTRL_R2_GG,        /* =1:グラフィックとグラフィックを合成 */
  235.     VCTRL_R2_BP,        /* =0:シャープ予約
  236.                 * /=1:グラフィック最下位bitで半透明/特殊プライオリティdotを指示
  237.                 */
  238.     VCTRL_R2_HP,        /* (EXON=1の時)=0:特殊プライオリティ/=1:半透明 */
  239.     VCTRL_R2_EXON,        /* =1:特殊表示機能(特殊プライオリティ/半透明機能)を実行 */
  240.     VCTRL_R2_VHT,        /* =1:グラフィックとビデオ画像を合成 */
  241.     VCTRL_R2_AH,        /* =1:グラフィックとテキストパレット0の色を半透明合成 */
  242.     VCTRL_R2_YS,        /* =1:スーパーインポーズ時にビデオ画像を表示しない */
  243.     VCTRL_R2_BITS
  244. };
  245. #define    VCTRL_R2    ((ushort *)0xe82600)
  246.  
  247.     /* MFP(マルチファンクションペリフェラル) */
  248.         /* GPIP */
  249. enum {        /* ビット番号 */
  250.     MFP_GPIP_ALARM = 0,    /* RTC(時計):ALARM信号(=1:H(通常)/=0:L) */
  251.     MFP_GPIP_EXPOM,        /* EXPON 信号(=1:H(通常)/=0:L) */
  252.     MFP_GPIP_POWER,        /* 本体前面の電源スイッチ(=1:スイッチoff/=0:on(通常)) */
  253.     MFP_GPIP_FMIRQ,        /* FM音源ICの割り込み要求(=1:要求なし/=0:要求中) */
  254.     MFP_GPIP_V_DISP,    /* CRTC:V-DISP信号(=1:垂直表示期間/=0:垂直帰線期間) */
  255.     MFP_GPIP_1,        /* 必ず 1 */
  256.     MFP_GPIP_CIRQ,        /* CRTC:ラスタ割り込み要求(=1:要求なし/=0:要求中) */
  257.     MFP_GPIP_H_SYNC,    /* CRTC:H-SYNC信号(=1:H(水平同期期間))=0:L) */
  258.     MFP_GPIP_BITS
  259. };
  260. #define    MFP_GPIP    ((uchar *)0xe88001)
  261.  
  262. /* 安易マクロ */
  263.     /* RGB の値から色要素を作成する(輝度Iは0固定) */
  264. #define    _RGB(_r, _g, _b)    ((((_g) << 10) | ((_r) << 5) | (_b)) << 1)
  265.     /* RGBI の値から色要素を作成する */
  266. #define    _RGBI(_r, _g, _b, _i)    (((((_g) << 10) | ((_r) << 5) | (_b)) << 1) + (_i))
  267.     /* 指定座標のGVRAMアドレスを算出する */
  268. #define    _GRAMADDR(x, y)    (GRPH_PAGE_0 + ((y) * GRPH_PAGE_WIDTH + (x)))
  269.  
  270. #endif    /* !defined(SCRNCOM_H_HAS_INCLUDED) */
  271.